package chapter04.s05polymorphic.example14;

// 多态
// 多态性是面向对象思想中的一个非常重要的概念，
// 多态是指不同对象在调用同一个方法（名）时表现出的多种不同行为

// 本质：多态就是同一个接口，使用不同的实例而执行不同操作
// 场景条件：
//   1. 子类继承父类（接口）
//   2. 子类重写方法
//   3. 父类引用指向不同子类对象：Parent p = child1; Parent p = child2;

// 定义抽象类Animal
abstract class Animal {
    abstract void shout();        // 定义抽象shout()方法
}

// 定义Cat类继承Animal抽象类
class Cat extends Animal {
    // 实现shout()方法
    public void shout() {
        System.out.println("喵喵……");
    }
}

// 定义Dog类继承Animal抽象类
class Dog extends Animal {
    // 实现shout()方法
    public void shout() {
        System.out.println("汪汪……");
    }
}

// 定义测试类
public class Example14 {
    public static void main(String[] args) {
        // 父类类型的变量可以指向子类的对象 （理解：猫都是动物）
        Animal animal = new Cat(); // 创建Cat对象,使用Animal类型的变量an1引用
        animal.shout();

        // 多态： Animal 类型的shout方法表现出不同的行为
        // animal现在指向Dog对象，调用Dog的shout方法
        animal = new Dog(); // 创建Dog对象,使用Animal类型的变量an2引用
        animal.shout();
    }
}
